package com.itany.corejava.code09_枚举;

/**
 * @author 石小俊
 * @version 1.0
 * @date 2023年03月20日 10:16
 */
public enum Season {
    // 由于枚举类型的构造方法是private修饰的,外部无法创建对象
    // 因此必须枚举类型自己在内部创建对象
    // 在内部创建对象时,必须位于类的第一行
    // 在创建对象时,很多部分被枚举做了内部处理,很多部分是固定的
    // 必须通过public static final修饰,创建的对象必须是自己
    // 所有固定部分直接省略
    // 由于每一个枚举类型实际上表示的就是一个枚举对象
    // 因此,也不需要指定类名
    // public static final Season SPRING = new Season("春天",1,3);
    // 因此,最终写法:变量名(构造方法参数)
    SPRING("春天",1,3),
    SUMMER("夏天",4,6),
    AUTUMN("秋天",7,9),
    WINTER("冬天",10,12),
    // 如果方法没有参数,括号可以省略
    ALL;

    // 季节
    private String name;
    // 季节开始的月份
    private int startMonth;
    // 季节结束的月份
    private int endMonth;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getStartMonth() {
        return startMonth;
    }

    public void setStartMonth(int startMonth) {
        this.startMonth = startMonth;
    }

    public int getEndMonth() {
        return endMonth;
    }

    public void setEndMonth(int endMonth) {
        this.endMonth = endMonth;
    }

    // 理论上,所有类中可以存在的东西,枚举类中都可以有
    // 可以包含属性、方法、构造方法等
    // 但是,对于构造方法,必须是私有的,不允许外部创建对象,只能在内部创建对象
    // 由于只能是private,因此修饰符可以省略,默认就是private
    Season(){

    }
    private Season(String name,int startMonth, int endMonth){
        this.name = name;
        this.startMonth = startMonth;
        this.endMonth = endMonth;
    }
}
